/**
 * 
 * 本中间先验证token 时再验证 token有效性
 */

module.exports = (options, app) => {
    return async function adminInterceptor(ctx, next) { //只验证token
        // console.log("token 路由中间件",ctx.header.token)

        const token = ctx.header.token;
        const tokenid = ctx.header.tokenid;
        await ctx.service.tools.tokenVerify(token, tokenid); 
        // console.log("token验证")
        const isToken = await ctx.model.Admin.find({
            where: {
                token: token,
                id: tokenid
            }
        })

        // const isToken=ctx.helper.cache.get("adminToken");//半小时有效期
        //    try{console.log("-----",isToken.id,isToken.token)}catch(e){ console.log("没找到token ")}
        // try{
        if (isToken) {
            // 
            await next(); //token 正确 ,执行控制器
        } else {
            ctx.status = 401;
            ctx.body = {
                status: 1,
                success: false,
                msg: '无权限.'
            }
        }
        // }catch(e){
        //     ctx.status=401;
        //     ctx.body = {
        //         status: 1,
        //         success:false,
        //         msg: '请登录'
        //        }
        // }
        // console.log("tokenList",tokenList[0].dataValues)


        //获取token
        // let token = ctx.cookies.get('token')
        // // 获取前端或以其他方式设置的cookie需要设置signed: false属性，避免对它做验签导致获取不到 cookie 的值。
        // let username = ctx.cookies.get('username', {signed: false})
        // //验证token是否为空
        // if (token){
        //     let result = verifyToken(token)
        //     let {_id} = result
        //     //验证客户端token是否合法
        //     if (_id) {
        //         let redis_token = await app.redis.get(username)
        //         //验证是否为最新的token
        //         if (token === redis_token) {
        //             await next();
        //         }else{
        //             // 如果不是最新token，则代表用户在另一个机器上进行操作，需要用户重新登录保存最新token
        //             ctx.body = {
        //                 status: 1,
        //                 message: '您的账号已在其他机器保持登录，如果继续将清除其他机器的登录状态'
        //             }
        //         }
        //     }else{
        //         // 如果token不合法，则代表客户端token已经过期或者不合法（伪造token）
        //         ctx.body = {
        //             status: 1,
        //             message: '您的登录状态已过期，请重新登录'
        //         }
        //     }
        // }else{
        //     // 如果token为空，则代表客户没有登录
        //     ctx.body = {
        //         status: 1,
        //         message: '您还没有登录，请登陆后再进行操作'
        //     }
        // }
    }


}

// function verifyToken(token) {
//     let cert = fs.readFileSync(path.join(__dirname, '../public/rsa_public_key.pem'));//公钥
//     let res = ''
//     try {
//         let result = jwt.verify(token, cert, {algorithms: ['RS256']}) || {};
//         let {exp, iat} = result, current = Math.floor(Date.now() / 1000);
//         if (current <= exp) {
//             res = result.data || {};
//         }
//     } catch (e) {
//         console.log(e);
//     }
//     return res;
// }

function timestampToTime(timestamp) {
    let date = new Date(timestamp); //时间戳为10位需*1000，时间戳为13位的话不需乘1000
    let Y = date.getFullYear() + '-'
    let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'
    let D = date.getDate() + ' '
    let h = date.getHours() + ':'
    let m = date.getMinutes() + ':'
    let s = date.getSeconds()
    return Y + M + D + h + m + s;
}